Use case: USART TX RX in DMA mode ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define DATA_TO_SEND_SIZE 256
#define DATA_TO_RECEIVE_SIZE DATA_TO_SEND_SIZE
uint8_t aTxBuffer[] = " **** USART_SlaveMode **** ";
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
USART_HandleTypeDef husart;
/* Ensure that all required peripherals
(USART, GPIO, DMA, NVIC,etc.) are configured properly
/*
...
*/
/* USART register TransmitReceive complete user callback */
HAL_USART_RegisterCallback(&husart, HAL_USART_TX_RX_CB_ID, USART_TxRxCpltCallback);
/* Start a USART TransmitReceive process in dma mode */
HAL_USART_TransmitReceive_DMA(&husart, aTxBuffer,
aRxBuffer, DATA_SIZE)
|
#define DATA_TO_SEND_SIZE 256
#define DATA_TO_RECEIVE_SIZE DATA_TO_SEND_SIZE
uint8_t aTxBuffer[] = " **** USART_SlaveMode **** ";
uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];
hal_usart_handle_t usart_handle;
/* Ensure that all required peripherals
(USART, GPIO, DMA, NVIC,etc.) are configured properly
/*
...
*/
/* USART register TransmitReceive complete user callback */
HAL_USART_RegisterTxRxCpltCallback(&usart_handle, USART_TxRxCpltCallback);
/* Start a USART TransmitReceive process in dma mode */
HAL_USART_TransmitReceive_DMA(&usart_handle, aTxBuffer,
aRxBuffer, DATA_TO_SEND_SIZE)
|
Key changes ¶
HAL2 DMA start uses
HAL_DMA_StartPeriphXfer_IT_Opt()(optional interrupt generation) instead ofHAL_DMA_Start_IT().HAL2 provides a dedicated registration API for TX/RX completion callbacks:
HAL_USART_RegisterTxRxCpltCallback().

